package com.ejd.utils;

import   java.util.*;
import   javax.mail.*;
import   javax.mail.internet.*;
import   javax.activation.*;

public class SendHtmlMail {

	String to = "";//收件人
	String from = "";//发件人
	String host = "";//smtp主机
	String port = "";
	//是否使用代理服务器
	String proxySet;
	String socksProxyHost;
	String socksProxyPort;
	String username = "" ;
	String password = "" ;
	String filename = "";//附件文件名
	String subject = "";//邮件主题
	String content = "";//邮件正文
	Vector file = new Vector();//附件文件集合
	/**
	* <br> 方法说明：默认构造器
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public SendHtmlMail(){
	}
	/**
	* <br> 方法说明：构造器，提供直接的参数传入
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public SendHtmlMail(String to,String from,String smtpServer,String port, String proxySet, String socksProxyHost,String socksProxyPort, String username,String password,String subject,String content){
		this.to = to;
		this.from = from;
		this.host = smtpServer;
		this.port = port;
		this.proxySet = proxySet;
		this.socksProxyHost = socksProxyHost;
		this.socksProxyPort = socksProxyPort;
		this.username = username;
		this.password = password;
		this.subject = subject;
		this.content = content;
	}
	/**
	* <br> 方法说明：设置邮件服务器地址
	* <br> 输入参数：String host 邮件服务器地址名称
	* <br> 返回类型：
	*/
	public void setHost(String host){
		this.host = host;
	}
	public void setPort(String port) {
		this.port = port;
	}
	public void setProxySet(String proxySet) {
		this.proxySet = proxySet;
	}
	public void setSocksProxyHost(String socksProxyHost){
		this.socksProxyHost = socksProxyHost;
	}
	public void setSocksProxyPort(String socksProxyPort){
		this.socksProxyPort = socksProxyPort;
	}
	/**
	* <br> 方法说明：设置登录服务器校验密码
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setPassWord(String pwd){
		this.password = pwd;
	}
	/**
	* <br> 方法说明：设置登录服务器校验用户
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setUserName(String usn){
		this.username = usn;
	}
	/**
	* <br> 方法说明：设置邮件发送目的邮箱
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setTo(String to){
		this.to = to;
	}
	/**
	* <br> 方法说明：设置邮件发送源邮箱
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setFrom(String from){
		this.from = from;
	}
	/**
	* <br> 方法说明：设置邮件主题
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setSubject(String subject){
		this.subject = subject;
	}
	/**
	* <br> 方法说明：设置邮件内容
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void setContent(String content){
		this.content = content;
	}
	/**
	* <br> 方法说明：把主题转换为中文
	* <br> 输入参数：String strText
	* <br> 返回类型：
	*/
	public String transferChinese(String strText){
		try{
		strText = MimeUtility.encodeText(new String(strText.getBytes(), "UTF-8"), "UTF-8", "B");
		}catch(Exception e){
		e.printStackTrace();
		}
		return strText;
	}
	/**
	* <br> 方法说明：往附件组合中添加附件
	* <br> 输入参数：
	* <br> 返回类型：
	*/
	public void attachfile(String fname){
		file.addElement(fname);
	}
	/**
	* <br> 方法说明：发送邮件
	* <br> 输入参数：
	* <br> 返回类型：boolean 成功为true，反之为false
	*/
	public boolean sendMail(){
	
		//构造mail session
		Properties props = System.getProperties();
		if (new Boolean(proxySet).booleanValue()) {
			props.setProperty("proxySet", proxySet);
	        props.setProperty("socksProxyHost", socksProxyHost);
	        props.setProperty("socksProxyPort", socksProxyPort);
		}
		props.put("mail.smtp.host",host);
		props.put("mail.smtp.auth","true");
		props.put("mail.smtp.socketFactory.port", port);  
		props.put("mail.smtp.socketFactory.fallback", "false");
		Session session=Session.getDefaultInstance(props, new Authenticator(){
		public PasswordAuthentication getPasswordAuthentication(){
		return new PasswordAuthentication(username,password);
		}
		});
	
		try {
		//构造MimeMessage 并设定基本的值
		MimeMessage msg = new MimeMessage(session);
		msg.setFrom(new InternetAddress(from));
		InternetAddress[] address={new InternetAddress(to)};
		msg.setRecipients(Message.RecipientType.TO,address);
		subject = transferChinese(subject);
		msg.setSubject(subject);
	
	
	
		//构造Multipart
		Multipart mp = new MimeMultipart();
	
		//向Multipart添加正文
		MimeBodyPart mbpContent = new MimeBodyPart();
		mbpContent.setContent(content, "text/html;charset=UTF-8");
		//********************************************
		//背景图片id
		mbpContent.setHeader( "Content-ID", "page");
	
		//********************************************
		//向MimeMessage添加（Multipart代表正文）
		mp.addBodyPart(mbpContent);
	
		//////////////////////////////////
		MimeMultipart mm = new MimeMultipart();
		// 这句很重要，千万不要忘了
		mm.setSubType( "related");
	
		mm.addBodyPart(mbpContent);
	
		//////////////////////////////////
		int i = 0;
		//向Multipart添加附件
		Enumeration efile=file.elements();
		while(efile.hasMoreElements()){
	        MimeBodyPart   mbpFile   =   new   MimeBodyPart();
	        filename=efile.nextElement().toString();
	        FileDataSource  fds   =   new   FileDataSource(filename);
	        mbpFile.setDataHandler(new   DataHandler(fds));
	        mbpFile.setFileName(fds.getName());
	        mbpFile.setHeader( "Content-ID","bg"+i);            
	        //向MimeMessage添加（Multipart代表附件）
	        mp.addBodyPart(mbpFile);
	        i++;
	    } 
	
		file.removeAllElements();
		//向Multipart添加MimeMessage
		msg.setContent(mp);
		msg.setSentDate(new Date());
	
		Transport transport = session.getTransport("smtp");
		transport.connect(host, username, password);
		transport.sendMessage(msg, msg.getAllRecipients());
		transport.close();
	
		//发送邮件
		//Transport.send(msg);
	
		} catch (MessagingException mex) {
		mex.printStackTrace();
		Exception ex = null;
		if ((ex=mex.getNextException())!=null){
		ex.printStackTrace();
		}
		return false;
		}
		return true;
		}
	}
